<?php

class UsuariosController extends AppController {

    var $name = 'Usuarios';
    var $uses = array('Usuario', 'Menu', 'PerfilAcesso');
    var $helpers = array('Seguranca');

    /**
     * @desc Monta a tela principal
     */
    function index() {
        $this->Usuario->recursive = 0;
        $this->set('usuarios', $this->paginate());
    }

    /**
     * @desc Monta a tela de visualizacao
     * @param int $id 
     */
    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Usuário Inválido.', true), 'default', array('tipo' => 'E'), 'mensagem');
            $this->redirect(array('action' => 'index'));
        }

        $usuario = $this->Usuario->find('first', array(
            'conditions' => array(
                'id' => $id
            ),
            'contain' => array(
                'PerfilAcesso' => array('Menu')
            )
                ));

        $this->set('usuario', $usuario);
    }

    /**
     * @desc Monta a tela de cadastro
     */
    function add() {
        if (!empty($this->data)) {
            $this->Usuario->create();
            $this->data['Usuario']['usuario'] = trim($this->data['Usuario']['usuario']);
            $this->data['Usuario']['nome'] = trim($this->data['Usuario']['nome']);
            $this->data['Usuario']['senha'] = md5($this->data['Usuario']['senha']);

            if ($this->Usuario->save($this->data)) {
                $this->serializePerfilAcesso();
                $this->Session->setFlash(__('Usuário salvo com sucesso.', true), 'default', array('tipo' => 'S'), 'mensagem');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Não foi possível salvar o Usuário, por favor tente mais tarde.', true), 'default', array('tipo' => 'E'), 'mensagem');
            }
        } else {
            $lista_menu = $this->Menu->find('all', array(
                'contain' => array()
                    ));
            $this->set('lista_menu', $lista_menu);
        }
    }

    /**
     * @desc Monta a tela de edição
     * @param int $id 
     */
    function edit($id = null) {

        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Usuário Inválido.', true), 'default', array('tipo' => 'E'), 'mensagem');
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->Usuario->save($this->data)) {
                $this->serializePerfilAcesso();
                $this->Session->setFlash(__('Usuário atualizado com sucesso.', true), 'default', array('tipo' => 'S'), 'mensagem');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Usuário não foi salvo, tente novamente.', true), 'default', array('tipo' => 'E'), 'mensagem');
            }
        }
        if (empty($this->data)) {

            $lista_menu = $this->Menu->find('all', array(
                'contain' => array('PerfilAcesso'=>array('conditions'=>array('usuario_id'=>$id)))
            ));

            $this->set('lista_menu', $lista_menu);
            $this->data = $this->Usuario->read(null, $id);
        }
    }

    /**
     * @desc Monta a tela de exclusão
     * @param int $id 
     */
    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Usuário Inválido.', true), 'default', array('tipo' => 'E'), 'mensagem');
            $this->redirect(array('action' => 'index'));
        }

        $valores = explode(',', $id);
        $sucesso = true;

        foreach ($valores as $valor) {
            if ($valor !== '') {
                $this->prepararExclusaoArquivoImagens($valor);
                if (!$this->Usuario->delete($valor)) {
                    $sucesso = false;
                }
            }
        }

        
        if ($sucesso) {
            $this->Session->setFlash(__('Usuário(s) excluído(s) com sucesso.', true), 'default', array('tipo' => 'S'), 'mensagem');
            $this->redirect(array('action' => 'index'));
        }
        $this->Session->setFlash(__('Usuário não foi excluído.', true), 'default', array('tipo' => 'E'), 'mensagem');
        $this->redirect(array('action' => 'index'));
    }
    
    /**
     * @desc Monta a tela para alterar senha
     * @param int $id 
     */
    function alterar_Senha($id = null) {

        if (!empty($this->data)) {
            
            $this->data['Usuario']['senha'] = md5($this->data['Usuario']['senha']);
            
            if ($this->Usuario->save($this->data)) {
                $this->Session->setFlash(__('Senha alterada com sucesso.', true), 'default', array('tipo' => 'S'), 'mensagem');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('A senha não foi salva, tente novamente.', true), 'default', array('tipo' => 'E'), 'mensagem');
            }
        }
        
        if (!$id) {
            $usuario = $this->Session->read('GESTAO');
            $this->data = array(
                'Usuario'=>array(
                    'id'=>$usuario['Usuario']['id']
                    )
                );
        }
        
        if (empty($this->data)){
            $this->data = $this->Usuario->read(null, $id);
        }

    }

    /**
     * @desc Prepara os dados para cadastro do perfil de cada usuario
     */
    public function serializePerfilAcesso() {

        if (!empty($this->data['PerfilAcesso'])) {

            foreach ($this->data['PerfilAcesso'] as $key => $item):

                if (sizeof($this->data['PerfilAcesso'][$key]) < 2) {
                    unset($this->data['PerfilAcesso'][$key]);
                } else {
                    $this->data['PerfilAcesso'][$key]['usuario_id'] = $this->Usuario->id;
                }

            endforeach;

            $this->Usuario->PerfilAcesso->deleteAll(array('usuario_id' => $this->Usuario->id));
            $this->Usuario->PerfilAcesso->saveAll($this->data['PerfilAcesso']);
        }
    }

}

?>